package com.CST.common.method;

import com.CST.entity.cb.BdEnumdetail;
import com.CST.mapper.dataplatform.BdEnumdetailMapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;

import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.List;
import java.util.stream.Collectors;

public  class CommonMethod {

    /**
     * 根据edParentCode获取最大edCode  BD_EnumDetil专用
     *
     * @param edParentCode
     * @return
     */
    public static String maxEdCode(BdEnumdetailMapper baseMapper, String edParentCode) {

        String maxValue = "";
        try {
            BdEnumdetail entity = new BdEnumdetail();
            entity.setEdParentCode(edParentCode);
            List<BdEnumdetail> list = baseMapper.getEnumDetailSource(entity);
            if (CollectionUtils.isNotEmpty(list)) {
                List<String> stringList = list.stream().map(t -> t.getEdCode()).collect(Collectors.toList());
                List<Integer> integerList = stringList.stream().map(x -> Integer.parseInt(x)).collect(Collectors.toList());
                Integer max = integerList.stream().reduce(Integer::max).get();
                return String.valueOf(max + 1);
            }

        } catch (Exception ex) {
            return maxValue;
        }

        return maxValue;
    }

    /*
    * 获取当月第一天
    * */
    public static LocalDate getFirstDay(int year, int month) {
        // 获取Calendar类的实例
        Calendar c = Calendar.getInstance();
        // 设置年份
        c.set(Calendar.YEAR, year);
        // 设置月份，因为月份从0开始，所以用month - 1
        c.set(Calendar.MONTH, month - 1);
        // 设置日期
        c.set(Calendar.DAY_OF_MONTH, 1);

        ZoneId zoneId = ZoneId.systemDefault();

        return c.getTime().toInstant().atZone(zoneId).toLocalDate();
    }

    /*
     * 获取当月最后一天
     * */
    public static LocalDate getLastDay(int year, int month) {
        // 获取Calendar类的实例
        Calendar c = Calendar.getInstance();
        // 设置年份
        c.set(Calendar.YEAR, year);
        // 设置月份，因为月份从0开始，所以用month - 1
        c.set(Calendar.MONTH, month - 1);
        // 获取当前时间下，该月的最大日期的数字
        int lastDay = c.getActualMaximum(Calendar.DAY_OF_MONTH);
        // 将获取的最大日期数设置为Calendar实例的日期数
        c.set(Calendar.DAY_OF_MONTH, lastDay);
        ZoneId zoneId = ZoneId.systemDefault();
        return c.getTime().toInstant().atZone(zoneId).toLocalDate();
    }

    /*
     * 获取上月第一天
     * */
    public static LocalDate getLastMonthFirstDay(int year, int month) {
        // 获取Calendar类的实例
        Calendar c = Calendar.getInstance();
        // 设置年份
        c.set(Calendar.YEAR, year);
        // 设置月份，因为月份从0开始，所以用month - 1
        c.set(Calendar.MONTH, month - 2);
        // 设置日期
        c.set(Calendar.DAY_OF_MONTH, 1);

        ZoneId zoneId = ZoneId.systemDefault();

        return c.getTime().toInstant().atZone(zoneId).toLocalDate();
    }

}
